Merge fixes from 'zlib/gzio.c' and replace 'zlib/gzio.c' with original version.
authoroliskoli <oliskoli>
Sun, 13 Aug 2006 17:15:00 +0000 (17:15 +0000)
committeroliskoli <oliskoli>
Sun, 13 Aug 2006 17:15:00 +0000 (17:15 +0000)
gbfile.c

index f78ce5f3d41976a042059d32302a837135dafd6f..30283d96ec44e852f338034aa8ae8bad1de4f536 100644 (file)
--- a/gbfile.c
+++ b/gbfile.c
@@ -61,7 +61,9 @@ gbfopen(const char *filename, const char *mode, const char *module)
                switch(tolower(*m)) {
                        case 'r':
                                file->mode = 'r';
-                               file->gzapi = 1;
+#if !ZLIB_INHIBITED
+                               file->gzapi = 1;        /* native or transparent */
+#endif
                                break;
                        case 'w':
                                file->mode = 'w';
@@ -78,7 +80,25 @@ gbfopen(const char *filename, const char *mode, const char *module)
        
        if (file->gzapi) {
 #if !ZLIB_INHIBITED
-               file->handle.gz = gzopen(filename, mode);
+               char openmode[32];
+
+               /* under non-posix systems files MUST be opened in binary mode */
+               
+               strcpy(openmode, mode);
+               if (strchr(mode, 'b') == NULL)
+                       strncat(openmode, "b", sizeof(openmode));
+               
+               if (strcmp(filename, "-") == 0) {
+                       FILE *fd;
+                       if (file->mode == 'r')
+                               fd = stdin;
+                       else
+                               fd = stdout;
+                       file->handle.gz = gzdopen(fileno(fd), openmode);
+               }
+               else
+                       file->handle.gz = gzopen(filename, openmode);
+                       
                if (file->handle.gz == NULL) {
                        fatal("%s: Cannot %s file '%s'!\n", 
                                module, 
@@ -88,7 +108,7 @@ gbfopen(const char *filename, const char *mode, const char *module)
                file->gzapi = 1;
 #else
                /* This is the only runtime test we make */
-               fatal("Zlib was not included in this build.");
+               fatal("%s: Zlib was not included in this build.\n", file->module);
 #endif
        }
        else {